package com.rui.patterns.proxy.jdk_proxy;

import com.rui.patterns.proxy.static_proxy.SellTickets;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author : [锐神NO.3]
 * @version : [v1.0]
 * @className : ProxyFactory
 * @createTime : [2022/2/21 15:48]
 * @description : [获取代理对象的工厂类]
 */

public class ProxyFactory {

    /**
     * 生命目标对象
     */
    private TrainStation station = new TrainStation();

    public SellTickets getProxyObject(){
        SellTickets proxyObject = (SellTickets) Proxy.newProxyInstance(
                station.getClass().getClassLoader(),
                station.getClass().getInterfaces(),
                (proxy, method, args) -> {
//                        System.out.println("invoke方法执行了!!!!");
                    System.out.println("代售点收取一定的服务费用(jdk动态代理)");

                    //执行目标对象的方法
                    Object obj = method.invoke(station, args);
                    return obj;
                }
        );
        return proxyObject;
    }
}
